<?php

class FriendshipController extends Zend_Controller_Action
{
    public function init()
    {
        parent::init();

        if (Zend_Auth::getInstance()->hasIdentity())
        {
            $user = Zend_Auth::getInstance()->getIdentity();

            $this->view->userProfile = $user->profile;
        }
        else
            $this->_redirect('/index');
    }

    public function indexAction()
    {
        //$this->view->friends = User::findAll();
        
    }

    public function addfriendAction()
    {
        $this->_helper->layout->disableLayout();
        
        $idFriend = $this->_getParam('id');
        
        //chekeo si existe el idUsuario que se quiere agregar como amigo
        self::checkUserExistence($idFriend);
        
        //chekeo que no se solicite agregar a un usuario que coincida con el ususario logeado
        //esto evita autoagregarse a nivel de controlador mas alla de lo que bloquee en la vista
        self::checkUserFriendIsMyself($idFriend);
        
        //chekear si ya era mi amigo
        if(Friendship::checkFriendStatus($idFriend) == Friendship::ARE_FRIEND){
            //si entra aca YA SOMOS AMIGOS asi que escapo
            $this->_redirect("/home/index");
        }
        
        //si continua es porque salto todas las barreras o posibles situaciones anormales
        
        $friendship = new Friendship();
        
        $friendship->id_user = Zend_Auth::getInstance()->getIdentity()->id;
        $friendship->id_friend = $idFriend;
        $friendship->status = Friendship::INVITES_HIM;
        
        $friendship->save();
        
        $this->_redirect('/friend/index');
                
    }
    
    public function acceptfriendAction()
    {
        $this->_helper->layout->disableLayout();
        
        $idFriend = $this->_getParam('id');
        
        $updateFriendship = Friendship::findOneByRequestFriendship($idFriend);
        $updateFriendship->status = Friendship::ARE_FRIEND;
        $updateFriendship->save();
        
        $friendship = new Friendship();
        $friendship->id_user = Zend_Auth::getInstance()->getIdentity()->id;
        $friendship->id_friend = $idFriend;
        $friendship->status = Friendship::ARE_FRIEND;
        $friendship->save();
        
        $this->_redirect('/friend/index');
                
    }
    public function deletefriendAction()
    {
        $this->_helper->layout->disableLayout();
        
        $idFriend = $this->_getParam('id');
        
        //chekeo que exista el usuario
        self::checkUserExistence($idFriend);
        
        //chekeo que no se trate del usuario logeado
        self::checkUserFriendIsMyself($idFriend);
        
        //antes de eliminarlo como amigo chekeo que exista como tal o tenga solicitud
        if(Friendship::checkFriendStatus($idFriend) == Friendship::NOT_FRIEND){
            //si entra aca NO ES AMIGO NI TIENE SOLICITUDES
            $this->_redirect("/home/index");
        }
        
        
        $requestedFriendship = Friendship::findOneByRequestedFriendship($idFriend);
        
        if($requestedFriendship)
            $requestedFriendship->delete();
        
        $requestFriendship = Friendship::findOneByRequestFriendship($idFriend);
        
        if($requestFriendship)
            $requestFriendship->delete();
        
        $this->_redirect('/friend/index');
                
    }
    
    private function checkUserExistence($idUser){
        $usuarioAmigo = User::findOneById($idUser);
        if($usuarioAmigo->id == null){
            //no existe el usuario que se quiere agregar
            //esto evita invitaciones fantasmas
            $this->_redirect("/home/index");
        }
    }
    
    private function checkUserFriendIsMyself($idFriend){
        //chekeo que no se solicite agregar a un usuario que coincida con el ususario logeado
        //esto evita autoagregarse a nivel de controlador mas alla de lo que bloquee en la vista
        $user = Zend_Auth::getInstance()->getIdentity();
        if($user->id == $idFriend){
            //si entra aca el usuario que se pretende agregar coincide con el usuario logeado
            $this->_redirect("/home/index");
        }
    }
}
